package single;

/**
 * 静态内部类的方式创建单例
 * 这个线程安全是jvm保证的。
 * 虚拟机加载一个class的时候只加载一次。
 * 所以CreateSingleDemo3这个也只加载一次。所以INS这个一只有一次。
 */
public class demo3 {
    public static void main(String[] args) {
        System.out.println(SingleDemo3.getINS().hashCode());
    }
}

class SingleDemo3{
    private SingleDemo3(){}

    // 静态内部类方式 一开始只加载SingleDemo3，CreateSingleDemo3这个是不会加载的。
    private static class CreateSingleDemo3{
        private static final SingleDemo3 INS = new SingleDemo3();
    }

    // 当调用 getINS 的时候 CreateSingleDemo3才会被加载。
    public static SingleDemo3 getINS(){
        return CreateSingleDemo3.INS;
    }
}